/**
 * 防抖函数
 * @param {Function} fn 需要防抖的函数
 * @param {number} delay 延迟时间，单位毫秒
 * @returns {Function} 防抖后的函数
 */
export const debounce = (fn, delay) => {
  let timer = null
  return function (...args) {
    if (timer) clearTimeout(timer)
    timer = setTimeout(() => {
      fn.apply(this, args)
    }, delay)
  }
}

/**
 * 格式化时间
 * @param {string|number|Date} time 时间
 * @returns {string} 格式化后的时间
 */
export const formatTime = (time) => {
  const date = new Date(time)
  const now = new Date()
  const diff = now - date

  // 小于1分钟
  if (diff < 60000) {
    return '刚刚'
  }
  // 小于1小时
  if (diff < 3600000) {
    return Math.floor(diff / 60000) + '分钟前'
  }
  // 小于24小时
  if (diff < 86400000) {
    return Math.floor(diff / 3600000) + '小时前'
  }
  // 小于30天
  if (diff < 2592000000) {
    return Math.floor(diff / 86400000) + '天前'
  }
  // 大于30天
  return date.toLocaleDateString()
}

/**
 * 检查用户登录状态
 * @returns {boolean} 是否已登录
 */
export const checkLogin = () => {
  const userId = uni.getStorageSync('userId')
  const token = uni.getStorageSync('token')
  return !!(userId && token)
}

/**
 * 安全地获取对象属性
 * @param {Object} obj 对象
 * @param {string} path 属性路径
 * @param {*} defaultValue 默认值
 * @returns {*} 属性值
 */
export const get = (obj, path, defaultValue = undefined) => {
  const travel = regexp => 
    String.prototype.split
      .call(path, regexp)
      .filter(Boolean)
      .reduce((res, key) => (res !== null && res !== undefined ? res[key] : res), obj)
  const result = travel(/[,[\]]+?/) || travel(/[,[\].]+?/)
  return result === undefined || result === obj ? defaultValue : result
} 